;****************************************************************
;Started 18/4/2015
;4-Channel 303MHz (313MHz)- Press one of 4 buttons for
;a short time and the corresponding output will toggle.
;****************************************************************
list p=12F629
radix dec
include "p12f629.inc"
errorlevel -302 ; Don't complain about
BANK 1 Registers during assembly
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF
& _INTRC_OSC_NOCLKOUT ;Internal osc.
;_MCLRE_OFF - master clear must be off for gp3 to work as input pin
;****************************************************************
; variables - names and files
;****************************************************************
temp1 equ 20h ;
temp2 equ 21h ;
temp3 equ 22h ;
temp4 equ 23h ;
_flash equ 26h ;for flashing the LED
;****************************************************************
;Equates
;****************************************************************
status equ 0x03
rp1 equ 0x06
rp0 equ 0x05
GPIO equ 0x05
status equ 03h
option_reg equ 81h
; bits on GPIO
pin7 equ 0 ;GP0 Input from 303MHz module
pin6 equ 1 ;GP1 Output A
pin5 equ 2 ;GP2 Output B
pin4 equ 3 ;GP3 not used
pin3 equ 4 ;GP4 Output C
pin2 equ 5 ;GP5 Output D
;bits
rp0 equ 5 ;bit 5 of the status register
;****************************************************************
;Beginning of program
;****************************************************************
org 0x00
nop
nop
nop
nop
nop
SetUp bsf status, rp0 ;Bank 1
movlw b'11001001' ;Set TRIS GP1,2,4,5 out GP0,input
movwf TRISIO ;
bcf status, rp0 ;bank 0
movlw 07h ;turn off Comparator ports
movwf CMCON ;must be placed in bank 0
clrf _flash
clrf GPIO ;Clear GPIO of junk
goto Main
;*********************
;* delays *
;*********************
;approx 16uS delay
_10uS goto $+1
goto $+1
goto $+1
goto $+1
goto $+1
goto $+1
goto $+1
retlw 00
_XuS movlw .100
movwf temp1
_2 nop
decfsz temp1,f
goto _2
retlw 00
_1mS movlw .2
movwf temp2
_1 nop
decfsz temp1,f
goto _1
decfsz temp2,f
goto _1
retlw 00
_100mS movlw .100
movwf temp2
_100 nop
decfsz temp1,f
goto _100
decfsz temp2,f
goto _100
retlw 00
_500mS movlw 0FFh
movwf temp2
_500 goto $+1
goto $+1
decfsz temp1,f
goto _500
decfsz temp2,f
goto _500
retlw 00
;****************************
;* Sub Routines *
;****************************
LED bsf gpio,1
call _500mS
bcf gpio,1
call _100mS
decfsz _flash,1
goto LED
call _500mS
call _500mS
call _500mS
call _500mS
goto Main
Toggle decfsz _flash,1
goto $+4
movlw 02
xorwf gpio,1 ;pin6 button A (1)
goto M2
decfsz _flash,1
goto $+4
movlw 02
xorwf gpio,1 ;pin6 button A (2)
goto M2
decfsz _flash,1
goto $+4
movlw 04
xorwf gpio,1 ;pin5 button B (3)
goto M2
decfsz _flash,1
goto $+4
movlw 04
xorwf gpio,1 ;pin5 button B (4)
goto M2
decfsz _flash,1
goto $+4
movlw 04
xorwf gpio,1 ;pin5 button B (5)
goto M2
decfsz _flash,1
goto $+4
movlw 10h
xorwf gpio,1 ;pin3 button C (6)
goto M2
decfsz _flash,1
goto $+4
movlw 10h
xorwf gpio,1 ;pin3 button C (7)
goto M2
decfsz _flash,1
goto $+4
movlw 10h
xorwf gpio,1 ;pin3 button C (8)
goto M2
decfsz _flash,1
goto $+4
movlw 20h
xorwf gpio,1 ;pin2 button D (9)
goto M2
decfsz _flash,1
goto $+4
movlw 20h
xorwf gpio,1 ;pin2 button D (10)
goto M2
decfsz _flash,1
goto M2
movlw 20h
xorwf gpio,1 ;pin2 button D (11)
goto M2
;****************************************************************
;* Main *
;****************************************************************
Main bsf status, rp0 ;Bank 1
bcf TRISIO,0 ;make pin7 output
bcf status, rp0 ;bank 0
bcf gpio,0 ;make pin7 low to discharge 100n
call _1mS ;discharge 100n
bsf status, rp0 ;Bank 1
bsf TRISIO,0 ;make pin7 input
bcf status, rp0 ;bank 0
nop
btfss gpio,0
goto $-2
bsf status, rp0 ;Bank 1
bcf TRISIO,0 ;make pin7 output
bcf status, rp0 ;bank 0
bcf gpio,0 ;make pin7 low to discharge 100n
call _1mS ;discharge 100n
clrf _flash
bsf status, rp0 ;Bank 1
bsf TRISIO,0 ;make pin7 input
bcf status, rp0 ;bank 0
btfsc gpio,0
goto Toggle
incf _flash,1
call _XuS
goto $-4
;switch debounce:
M2 bsf status, rp0 ;Bank 1
bcf TRISIO,0 ;make pin7 output
bcf status, rp0 ;bank 0
bcf gpio,0 ;make pin7 low to discharge 100n
call _1mS ;discharge 100n
bsf status, rp0 ;Bank 1
bsf TRISIO,0 ;make pin7 input
bcf status, rp0 ;bank 0
call _1mS
call _1mS
btfsc gpio,0
goto M2
goto Main
END
|